package cn.kent.high.juc.lock.reentrantLock;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 使用可重入锁，实现一个线程安全的 数组操作类
 *
 * 使用可重入锁，使得同一时间只能有一个线程访问和操作数组
 * 多线程下，一个线程在操作，其他线程就会放入到AQS的阻塞队列，而后被阻塞挂起
 */
public class ReentrantLockList {
    private List<String> array = new ArrayList<String>();
    private final ReentrantLock lock = new ReentrantLock();

    public void add(String e){
        lock.lock();
        try {
            array.add(e);
        }finally {
            lock.unlock();
        }
    }

    public void remove(String e){
        lock.lock();
        try {
            array.remove(e);
        }finally {
            lock.unlock();
        }
    }

    public void get(int index){
        lock.lock();
        try {
            array.get(index);
        }finally {
            lock.unlock();
        }
    }
}
